﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIPDTO;

namespace SIPDAL
{
    public class mgProvincia
    {
        /// <summary>
        /// Declaracion de Variables
        /// </summary>
        SIPDataContext dc = new SIPDataContext();
        dtoError _resp = new dtoError();
        tblProvincia _tbprovincia = new tblProvincia();
        List<dtoProvincias> _provincias = new List<dtoProvincias>();

        public mgProvincia()
        {
        }

        /// <summary>
        /// Obtiene las provincias para ser mostradas en el listado de provincias
        /// se utiliza tambien para cargar los combos de provincia
        /// </summary>
        /// <returns></returns>
        public List<dtoProvincias> ObtenerProvincia()
        {
            int i =0;
      
            try 
            {
                   
            var condicion = (from p in dc.tblProvincias
                             select p);

                foreach (tblProvincia prov in condicion)
                {
                    _provincias.Add(new dtoProvincias());
                    _provincias[i].Identificacion = prov.id_provincia;
                    _provincias[i].Descripcion = prov.descripcion;
                    _provincias[i].Estado = Convert.ToBoolean(prov.activo);
                    i++;
                }
 
            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }
    
            return _provincias;
           
        }

        /// <summary>
        /// Obtiene el valor de la provincia para mostrarlo en pantalla
        /// ademas se utiliza en Distritos
        /// </summary>
        /// <param name="provincia"></param>
        /// <returns></returns>

        public List<dtoProvincias> ObtenerProvincia(dtoProvincias provincia)
        {
            int i = 0;

            try
            {

                var condicion = (from p in dc.tblProvincias
                                 where p.id_provincia == provincia.Identificacion 
                                 select p);

                foreach (tblProvincia prov in condicion)
                {
                    _provincias.Add(new dtoProvincias());
                    _provincias[i].Identificacion = prov.id_provincia;
                    _provincias[i].Descripcion = prov.descripcion;
                    _provincias[i].Estado = Convert.ToBoolean(prov.activo);
                    i++;
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }

            return _provincias;

        }

        /// <summary>
        /// Metodo encargado de la inclusión y modificación de los datos de la provincia
        /// </summary>
        /// <param name="provincia"></param>
        /// <returns></returns>
        public dtoError AceptarProvincia(dtoProvincias provincia, int evento)
        {

            _tbprovincia.id_provincia = provincia.Identificacion;
            _tbprovincia.descripcion = provincia.Descripcion;
            _tbprovincia.activo = provincia.Estado;
            try
            {
                _resp = ExisteProvincia(provincia);
                if ((_resp.IdError == -101) && (evento == 1))//No existe el registro y se procede a ingresarlo
                {
                    dc.tblProvincias.InsertOnSubmit(_tbprovincia);
                    dc.SubmitChanges();
                    _resp.Mensaje = "Información guardada correctamente.";
                    _resp.IdError = 100;

                }
                if ((_resp.IdError == 101) && (evento == 1))
                {
                    _resp.Mensaje = "La información de la provincia ya se encuentra registrada.";
                    _resp.IdError = -100;
                }
                else if ((_resp.IdError == 101) && (evento == 2))// Se modifica los registros de la provincia
                {
                    tblProvincia param = dc.tblProvincias.Single(p => p.id_provincia == provincia.Identificacion);
                    param.descripcion = provincia.Descripcion;
                    param.activo = provincia.Estado;
                    dc.SubmitChanges();
                    _resp.Mensaje = "Información modificada correctamente.";
                    _resp.IdError = 100;

                }
                return _resp;
            }

            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                return _resp;
                throw;
            }

        }

        /// <summary>
        /// Metodo encargado de consultar la existencia de la provincia en la base de datos para luego insertar el registro
        /// </summary>
        /// <param name="provincia"></param>
        /// <returns></returns>

        public dtoError ExisteProvincia(dtoProvincias provincia)
        {
            var condicion = (from p in dc.tblProvincias
                             where p.id_provincia == provincia.Identificacion
                             select p).Count();
            if (Convert.ToInt32(condicion.ToString()) > 0)
            {
                _resp.Mensaje = "La provincia ya existe en la tabla de Provincias";
                _resp.IdError = 101;

            }
            else
            {
                _resp.IdError = -101;
                _resp.Mensaje = "La provincia no existe en la tabla de Provincias";
            }
            return _resp;
        }

        /// <summary>
        ///  Método encargado de inactivar la provincia.
        /// </summary>
        /// <param name="provincia"></param>
        /// <returns></returns>
        public dtoError InactivarProvincia(dtoProvincias provincia)
        {
            try
            {
                var condicion = (from p in dc.tblProvincias
                                 where p.id_provincia == provincia.Identificacion
                                 select p).ToList();
                foreach (tblProvincia _prov in condicion)
                {
                    _prov.activo = provincia.Estado;
                    dc.SubmitChanges();
                    _resp.Mensaje = "Provincia inactivada correctamente.";
                    _resp.IdError = 100;
                }

            }
            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                return _resp;
                throw;
            }

            return _resp;
        }


    }
}
